import json

from mitmproxy import http, ctx


class MitmRewrite:

    # mitmdump实现rewrite
    # 和charles的rewrite原理是一样的: 篡改response
    # 客户端发送request给服务端，代理不做修改直接转发给服务端，
    # 服务端收到request后，发送response给客户端，代理拦截response后，修改response的某个字段，然后将篡改的response发送给客户端

    # 当发现某个请求的地址符合某个条件时，就将响应信息中的字段做篡改
    def response(self,flow:http.HTTPFlow):
        #if 匹配规则
        # 如果 quote.json 和 x= 在url中
        #pretty_url是对url进行一个格式化，把于url无关的东西给摘除掉
        if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
            #将response转换为python对象
            ctx.log.info(flow.request.url)
            print("这一条url符合要求")
            data = json.loads(flow.response.content)
            #ctx.log.info(f"print response{data}")
            #从data中取出name字段进行修改
            data["data"]["items"][0]["quote"]["name"] = "mitm1-rewrite-测试"
            # 从data中取出amplitude涨跌幅字段进行修改
            data["data"]["items"][0]["quote"]["percent"] = -88.88
            #将data转回json字符串，给response的text
            flow.response.text = json.dumps(data)
        else:
            ctx.log.info(flow.request.url)
            print("这一条url不符合要求")

#将实例放入插件列表中
addons = [
    MitmRewrite()
]